package myjava.astratto;

// ABSTRACT - non access modifier

/* Car e' troppo astratto nel mio programma per permetterne l'istanza
 * Allo stesso tempo voglio avere la possibilita' di fare eriditare metodi
 * generici alle sottoclassi e che quindi voglio implementare completamente
 * nella classe base.
 *
 * SOLO METODI NON PRIVATE POSSONO ESSERE ABSTRACT (vedi oltre)
*/
abstract public class Car {

   public void start() {
      System.out.println("car is starting ...");
   }

   public void stop() {
      System.out.println("car is stopping ...");
   }

   abstract public int getSpeed();
   abstract protected String getFuelConsumption();

   /* La prossima riga non ha senso e genera errore di compilazione
    * Un metodo abstract, che va quindi implementato nelle sottoclassi
    * ha senso solo se pubblico o protected. Che senso avrebbe obligare l'implementazione
    * di un metodo privato e quindi non overridabile? Io volglio he gli oggetti Car siano
    * tali da un punto di vista dell'interfaccia pubblica */

   // abstract private void getFuel();

}